// 配置信息
layIM = new Object(), 
layIM.custom = new Object(), 
layIM.custom.config = new Object();
layIM.custom.config.chatWsIp = "localhost:8080/jeecg";
layIM.custom.config.chatIp = "http://" + layIM.custom.config.chatWsIp;
layIM.custom.config.websocketIp = "ws://" + layIM.custom.config.chatWsIp 
	+ "/WebSocket/" + layIM.custom.config.currentId;
layIM.custom.config.currentId = "";

// 打开聊天窗口
layIM.custom.openChat = function (touserid, type) {
	
	if (layIM.custom.LayIM == null) {
		window.alert("IM组件没有初始化，请先调用IM初始方法");
	}
	
	jQuery.post(layIM.custom.config.chatIp + "/chat/imController.do?getUser", {
		touserid: touserid, type: type
	}, function (user) {
		if (user != null) {
			layIM.custom.LayIM.chat({
				name: user.username //名称
				,type: 'friend' //聊天类型
				,avatar: user.avatar //头像
				,id: user.id //好友id
			})
		} else {
			window.alert("未找到指定用户");
		}
	}, "json");
}

// 延迟加载IM服务
layIM.custom.initLayImDelay = function (userid, type, touserid) {
	jQuery.post(layIM.custom.config.chatIp + "/chat/imController.do?getUserid", {
	}, function (text) {
		layIM.custom.config.currentId = text;
		layIM.custom.initLayIm(layIM.custom.config.currentId, type, touserid);
	});
}

// 初始化IM服务
layIM.custom.initLayIm = function (userid, type, touserid) {
	
	//取消默认的浏览器自带右键 很重要！！
	window.oncontextmenu=function(e){
	    e.preventDefault();

	    $('.layui-layim-min').css("display","none");
	}
	
	// 如果当前IM服务已初始化，并且ID等于用户ID，则不再重复初始化
	if (layIM.custom.LayIM != null && layIM.custom.config.currentId == userid) {
		return true;
	}
	
	// 如果用户ID没有传递，则读取服务加载当前登录用户ID
	if (userid == null) {
		layIM.custom.initLayImDelay(userid, type, touserid);
		return;
	} else {
		layIM.custom.config.currentId = userid;
	}
	
	// 根据ID初始化WebSocket连接
	layIM.custom.config.websocketIp = "ws://" + layIM.custom.config.chatWsIp 
		+ "/WebSocket/" + layIM.custom.config.currentId;
	
	// 判断浏览器是否支持WebSocket
	if (typeof WebSocket != 'undefined') {
		// 初始化layIM服务
		layui.use('layim', function(layim){
			// 建立WebSocket通讯
		    var socket = new WebSocket(layIM.custom.config.websocketIp);
		    // 设置自定义IM
		    layIM.custom.LayIM = layim;
	
		    //基础配置
		    layim.config({
		        //msgbox: layui.cache.dir + 'css/modules/layim/html/msgbox.html',
		        //初始化接口
		        init: {
		            url: layIM.custom.config.chatIp + '/chat/imController.do?getUsers'
		            ,data: {userid:userid, type:type, touserid:touserid}
		        }

		        //查看群员接口
		        ,members: {
		            url: layIM.custom.config.chatIp + '/chat/imController.do?getMembers'
		            ,data: {}
		        }
	
		        ,uploadImage: {
		            url: layIM.custom.config.chatIp + '/chat/imController.do?uploadImage' //（返回的数据格式见下文）
		            ,type: 'post' //默认post
		        }
	
		        ,uploadFile: {
		            url: layIM.custom.config.chatIp + '/chat/imController.do?uploadFile' //（返回的数据格式见下文）
		            ,type: '' //默认post
		        }
	
		        ,skin: ['http://cdn.firstlinkapp.com/upload/2016_4/1461747766565_14690.jpg'] //皮肤
		        ,brief:true
		        ,title:"在线聊天"
		        ,maxLength:3000
		        ,right:'0px'
		        ,brief:false
		        ,isAudio:true
		        ,isVideo:true
		        ,isgroup: true
		        ,chatLog: layIM.custom.config.chatIp + '/chat/chatMessageHistory.do?from='
		        	+ layIM.custom.config.currentId //聊天记录地址
		        //,find: './demo/find.html'
		        ,copyright: true //是否授权
		    });
	
		    //监听发送消息
		    layim.on('sendMessage', function(data){
		       // console.log(data);
		        //更多情况下，一般是传递一个对象
		        socket.send(JSON.stringify(data));
		    });
	
		    //连接成功时触发
		    socket.onopen = function(){
		    };
	
		    //监听收到的消息
		    socket.onmessage = function(res){
		        var message = JSON.parse(res.data);
		        var timestamp = new Date().getTime();
		        //console.log(message)
		        if(message.to.type=="group"){
		            layim.getMessage({
		                username: message.mine.username //消息来源用户名
		                ,avatar: message.mine.avatar//消息来源用户头像
		                ,id: message.to.id //聊天窗口来源ID（如果是私聊，则是用户id，如果是群聊，则是群组id）
		                ,type: message.to.type //聊天窗口来源类型，从发送消息传递的to里面获取
		                ,content: message.mine.content //消息内容
		                ,timestamp: timestamp //服务端动态时间戳
		            });
		        }else {
		            layim.getMessage({
		                username: message.mine.username //消息来源用户名
		                ,avatar: message.mine.avatar//消息来源用户头像
		                ,id: message.mine.id //聊天窗口来源ID（如果是私聊，则是用户id，如果是群聊，则是群组id）
		                ,type: message.to.type //聊天窗口来源类型，从发送消息传递的to里面获取
		                ,content: message.mine.content //消息内容
		                ,timestamp: timestamp //服务端动态时间戳
		            });
		        }
		        if(message.to.msgHisId != null && message.to.msgHisId != undefined && message.to.msgHisId != ''){
		            var mine = {
		                avatar: message.to.avatar //我的头像
		                ,content: message.mine.content
		                ,id: message.to.id
		                ,mine: true //是否我发送的消息
		                ,username: message.to.username
		            };
		            var to = {
		                avatar: message.mine.avatar
		                ,id: message.mine.id
		                ,name: message.mine.username
		                ,sign: message.mine.sign
		                ,type: "friend" //聊天类型，一般分friend和group两种，group即群聊
		                ,username: message.mine.username
		                ,msgHisId: message.to.msgHisId
		            }
		            var data = JSON.stringify({
		                mine: mine
		                ,to: to
		            });
		            socket.send(data);
		        }
		    };
		    //监听在线状态的切换事件
		    layim.on('online', function(data){
		       // console.log(data);
		    });
	
	
		    //监听查看群员
		    layim.on('members', function(data){
		       // console.log(data);
		    });
	
		    //监听聊天窗口的切换
		    layim.on('chatChange', function(data){
		       // console.log(data);
		    });
		    layim.on('sign', function(value){
		        $.get(layIM.custom.config.chatIp + "/chat/imController.do?changeSign&sign=" + value);
		       // console.log(value); //获得新的签名
		    })
		    
		    layim.on('ready', function(options){
		    	if (touserid != null) {
		    		layIM.custom.openChat(touserid, type);
		    	}
	    	});
		});
	} else {
		window.alert("您的浏览器当前版本不支持WebSocket，请更新浏览器版本。");
	}
}